=================================================================
ISTRUZIONI e SPECIFICHE per il FRAMMENTO 3 del PROGETTO "lcschat"
=================================================================

Il progetto prevede la realizzazione di un sistema client server che
implementa un chat distribuita. Il terzo frammento completa la realizzazione
della chat, ovvero
1) completa il server con la gestione dei segnali e degli errori
2) implementa la libreria di comunicazione (lcscom.h) utilizzando i 
   socket AF_UNIX 
3) implementa il client (utilizzando le librerie MainWindow/stubMAinWindow 
   incluse in questo kit)

-------------------------------------------------------
Backup dei frammenti 1/2
------------------------------------------------------

Siccome il file lcschat_kit3.tar va s-tarato nella propria directory
di lavoro e sovrascrivera' alcuni dei vecchi file 
e' necessario prima di tutto effettuare un backup dei file
contenuti in essa. Ad esempio: posizionarsi nella directory che
contiene la cartella di progetto "lcschat" 
Creare una directory di backup *fuori da lcschat/**, copiare in essa tutti i
file e proteggerli in scrittura.
Ad esempio:

bash:~$ mkdir BACK2
bash:~$ cp -fr lcschat BACK2
bash:~$ chmod a-w BACK2/*

Questo vi permettera' di recuperare  i file in caso di perdite accidentali (ad
esempio, se tar xvf sovrascrive i file). 


-----------------------------------------
Estrarre il materiale da lcschat_kit3.tar
-----------------------------------------

1) Copiare lcschat_kit3.tar nella directory che contiene lcschat/
es

bash:~$ ls
lcschat_kit3.tar lcschat/
bash:~$

2) s-tarare il file lcschat_kit3.tar

bash:~$ tar xvf kit3.tar

questa operazione creera' alcuni nuovi file nella directory lcschat e ne
sovrascrivera' altri (per chiedere conferma della sovrascrittura e'
possibile settare esplicitamente l'opzione -k nel tar es: tar xkvf
...), 

in particolare: verra creata la directory
lcschat/test3/

ed i file
lcschat/README-3
lcschat/MainWindow.tgz 
lcschat/stubMainWindow.tgz 
lcschat/test-frag3 
lcschat/test3/outfrag3.check
lcschat/MainWindow.h

mentre verranno sovrascritti i file
lcschat/bin/client
lcschat/bin/testclient
lcschat/bin/server
lcschat/Makefile
lcschat/Makefile2


-----------------------------------------------
Descrizione dei file contenuti in lcschat_kit3:
-----------------------------------------------

README-3		: questo file
	

Makefile		: makefile per il test finale del progetto e la
			  consegna (studenti LCS) 
			  (NON MODIFICARE se non nella prima sezione
			  per aggiungere target)

Makefile2		: makefile per il test finale del progetto
			  e la consegna (studenti LPS LPC -- recuperi)
			  (NON MODIFICARE se non nella prima sezione
			  per aggiungere target)

lcschat/bin/             : directory contenente gli eseguibili di prova
                           
lcschat/bin/client	 : eseguibile client (input ed output TTY)
lcschat/bin/server	 : eseguibile server 
lcschat/bin/testclient   : eseguibile client (input ed output STDIN STDOUT)

test3/		        : directory output per il testing
test3/outfrag3.check    : output atteso test-frag3(NON MODIFICARE)

lcschat/test-frag3	  : script di test

lcschat/MainWindow.h	  : file di include librerie client (unico)
lcschat/MainWindow.tgz     : codice libreria client (ncurses)
lcschat/stubMainWindow.tgz : codice libreria client (stdin/stdout)


------------------------------------------------
Cosa deve essere realizzato per il frammento3 :
------------------------------------------------
** NB: leggere accuratamente la specifica complessiva del progetto disponibile 
sul sito prima di procedere alla lettura della descrizione delle parti da 
realizzare ****************************************************************8

Il secondo frammento prevede la realizzazione di :

1) libreria di comunicazione (file lcscom.c), 

 la specifica delle varie funzioni da realizzare si trova in lcscom.h, fornito
 assieme al kit2

2) il server della chat (file server.c)

Il server realizzato nel secondo frammento deve essere completato in modo da
gestire la terminazione, gli errori ed i segnali.

3) il client della chat (file client.c)

Il client si collega al server della chat ed interagisce con l'utente come
descritto nelle specifiche complessive del progetto. Per leggere e scrivere
dal terminale utilizza la libreria MainWindow contenuta in MainWindow.tgz, la
libreria puo' essere s-tarata e decompressa con

bash:~$ tar xzvf MainWindow.tgz

questo creera' una directory MainWindow. La compilazione della libreria puo'
essere invocata com "make all" dalla directory MainWindow. Nella
sottodirectory doc/ e' disponibile il manuale utente con la specifica delle
sette funzioni implementate per leggere e scrivere dal terminale.

E' inoltre fornita una versione di MainWindow che legge e scrive da
stdin/stdout e che viene utilizzata nei test automatici del client
(stubMainWindow.tgz). Anche questa libreria deve essere starata e compilata
per un corretto funzionamento dei test.

------------------
Come procedere :
-----------------

0) leggere attentamente il README e capire il funzionamento il codice fornito
dai docenti (codice C, script, Makefile)

1) analizzare accuratamente i file test2/*.check e test3/*.check (che
forniscono l'output atteso dai test) per capire come deve essere formattato
ogni messaggio 

2) implementare le funzioni richieste ed effettuare testing
   preliminare 

3) testare il software complessivo con makefile fornito dai
  docenti. E' necessario prima settare la variabile di
  ambiente MALLOC_TRACE in modo che contenga la stringa "./mtrace.log" e poi
  procedere al test invocando i target relativi ai vari test, cioe'
  eseguire quanto segue 
        
       bash:~$ export MALLOC_TRACE="./.mtrace.log"
       bash:~$ make test1
       bash:~$ make test2
       bash:~$ make test-finale


( oppure 

       bash:~$ make -f Makefile2 test1
       bash:~$ make -f Makefile2 test2
       bash:~$ make -f Makefile2 test-finale

per chi deve recuperare LPS o LCS)

  NOTA: (1) non deve essere modificata la struttura delle directory
  interne a lcschat/
  (2) E' importante che i test vengano effettuati solo su
  un programma gia' funzionante altrimenti i risultati possono essere di
  difficile interpretazione, fuorvianti o inutili.

4) preparare la documentazione: ovvero commentare adeguatamente i file
   *.c e *.h ed inserire una intestazione contenente il nome dei
   componenti del gruppo e una dichiarazione di originalita' ad esempio:

   /* File : lcshash.c
     Autori: Nino Bixio, Giuseppe Garibaldi
     Si dichiara che il contenuto di questo file e' in ogni sua parte opera
     originale degli autori sopracitati.  */

5) Scrivere le indicazioni per l'utente in un file di nome
   "README.FIRST". Tale file  dovra' dare indicazioni precise su come
   compilare/eseguire/terminare client e server, eventuali bug noti e
   indirizzo di mail da contattare per segnalare eventuali malfunzionamenti

6) Scrivere la relazione (formato PDF). Una struttura possibile per la
   relazione puo' essere trovata nelle FAQ. E' importante capire che la
   relazione NON deve rispiegare le specifiche del progetto ma deve spiegare
   come queste specifiche sono state implementate (scelte di progetto,
   motivazioni etc.).

7) controllare il file "gruppo.txt" con i nomi ed i dati dei componenti del
   gruppo e 

8) consegnare il file ESCLUSIVAMENTE eseguendo

      bash:~$ make consegna-finale

( oppure 

       bash:~$ make -f Makefile2 consegna-finale

per chi deve recuperare LPS o LCS)

   e seguendo le istruzioni. Anche in questo caso occorre  che la variabile
   MALLOC_TRACE sia settata a "./mtrace.log".
   Per la consegna e' necessaria l'utility "mpack" installata solo nelle
   macchine dei laboratori H, M ed I e su trudy. 
   Per consegne da altre macchine e'
   possibile scaricare il binario di 'mpack' dal sito del corso. 


---------------------------------------
 NOTE IMPORTANTI: LEGGERE ATTENTAMENTE
---------------------------------------

1) gli eleborati non consegnati con "make consegna-finale" non verranno accettati

2) tutti gli elaborati verranno confrontati fra di loro con tool automatici
   per stabilire eventali situazioni di PLAGIO. Se tali situazioni si
   verificheranno *tutti* gli elaborato coinvolti verranno annullati con
   conseguente perdita del bonus. 

3) Tutti gli studenti coinvolti in un episodio di PLAGIO comprovato dovranno
   re-implementare il frammento incriminato e saranno sottoposti ad una prova
   orale supplementare. In caso di recidive verranno esclusi dalla
   possibilita' di sostenere l'esame per TUTTO IL RESTO DELL'ANNO ACCADEMICO
   in CORSO.

4) Chi in sede di orale risulta palesemente non essere l'autore del software
   consegnato in uno dei frammenti verra' escluso dalla possibilita' di
   sostenere l'esame per TUTTO IL RESTO DELL'ANNO ACCADEMICO in CORSO.

5) Tutti i comportamenti scorretti ai punti 3 e 4 verranno segnalati
   ufficialmente al presidente del corso di laurea, che si riserva di
   decidere azioni disciplinari supplementari a quelle sopra descritte.
